﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Graphics;
using SpiritAlight.SceneManagement;

namespace SpiritAlight.Animation
{


    class AnimationPart
    {
        List<Texture2D> texture = new List<Texture2D>();

        IAnimationSprite host;

        public AnimationPart(AnimationSprite inHost = null)
        {
            if (inHost == null)
                host = new NullAnimationSprite();
            else
                host = inHost;
            
        }

        /// <summary>
        /// アニメーションロード
        /// </summary>
        /// <param name="fileName">ファイル名好きな数だけ</param>
        /// <returns>ロード成功ならばtrue</returns>
        public bool LoadAnimation(params string[] fileName)
        {
            try
            {
                foreach (var loadData in fileName)
                {
                    texture.Add(SceneManager.Content.Load<Texture2D>(loadData));
                }
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine("アニメーションファイルロード失敗");

                System.Diagnostics.Debug.WriteLine(e.Message); 
                return false;
            }
            return true;
        }

        /// <summary>
        /// ホストのIDの情報からアニメーションをさせ、テクスチャを返す。
        /// </summary>
        public Texture2D Animation
        {
            get
            {
                
                if (host.Playing)
                    return (texture[host.Frame]);
                
                host.Count++;                    //次のフレームへ
                host.Frame = host.Count / host.FrameRate;  //何枚目を出すか計算

                if (texture.Count < host.Frame) //フラグが最大枚数を超えたら
                {
                    host.ISEnd = true;
                    switch (host.Mode)
                    {
                        case AnimationMode.Once:
                            host.Frame--;
                            host.Count--;
                            host.Playing = false;
                            break;
                        case AnimationMode.OnceReturn:
                            host.End();
                            break;
                        case AnimationMode.Repeat:
                            host.Play();
                            break;
                    }
                }
                else
                    host.ISEnd = false;
                try
                {
                    return (texture[host.Frame]);
                }
                catch (Exception)
                {
                    return null;
                }
            }
        }



    }
}
